﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ATM.DataAccess;
using ATM.Entity;

namespace ATM.Bussiness
{
    public class BankSubSystem
    {
        #region Feilds
        private ATMCard _atmCard;
        private ATMCardDAO _atmCardDao;
        private AccountDAO _accountDao;
        private Account _account;
        private CaseATM _caseAtm;
        #endregion
        #region Properties
        private CaseATM CaseAtm
        {
            set { _caseAtm = value; }
        }
        private AccountDAO AccountDao
        {
            set { _accountDao = value; }
        }
        private Account account
        {
            set { _account = value; }
        }

        public ATMCard AtmCard
        {
            get { return _atmCard; }
            private set { _atmCard = value; }
        }

        private ATMCardDAO AtmCardDao
        {
            set { _atmCardDao = value; }
        }
        #endregion

        /// <summary>
        /// constructor for BankSubSystem
        /// </summary>
        /// <param name="aTMCard">Atm card current</param>
        public BankSubSystem(ATMCard aTMCard)
        {
            AtmCard = aTMCard;
            AtmCardDao = new ATMCardDAO();
            AccountDao = new AccountDAO();
            account = _accountDao.GetAccount(AtmCard.StrCardId);
        }
        /// <summary>
        /// Thay đổi mã PIN của card
        /// </summary>
        /// <param name="newPIN1">Mã PIN mới lần thứ nhất</param>
        /// <param name="newPIN2">Mã PIN mới lần thứ 2</param>
        /// <returns>
        /// 1: Cập nhật PIN thành công.
        /// 2: mã PIN nhập vào không giống nhau.
        /// </returns>
        public int ChangePIN(string newPIN1, string newPIN2)
        {
            if (newPIN1 == newPIN2)
            {
                _atmCardDao = new ATMCardDAO();
                _atmCardDao.updatePin(newPIN1, _atmCard.StrCardId);
                return 1;
            }
            else
            {
                return 2;
            }
        }
        /// <summary>
        /// Hàm trả về số dư tài khoản của chủ thẻ.
        /// </summary>
        /// <returns>Số dư tài khoản của chủ thẻ</returns>
        public double ViewBalance()
        {
            double dblBalance = _accountDao.GetBalance(AtmCard.StrCardId);
            return dblBalance;
        }
        /// <summary>
        /// In số dư tài khoản của chủ thẻ.
        /// </summary>
        /// <param name="balance">số dư tài khoản.</param>
        /// <returns>chuỗi được in ra.</returns>
        public string PrintBalance(double balance)
        {
            string strPrint = "";
            strPrint = "Number of account: \t" + _account.AccountNumber + "\n";
            strPrint += "Số dư tài khoản:\t " + _account.Balance + "\n";
            return strPrint;
        }
        public string Withdraw(double amount)
        {
            string strResult = "";

            return strResult;
        }

        private BankMainSystem bankSytemObject = null;
        private int intCountCorrectAuthen = 0;
        public BankSubSystem()
        {
            bankSytemObject = new BankMainSystem();
        }

        public int AuthenticateUser(string strCardID, string strPIN)
        {
            if(!string.IsNullOrEmpty(strCardID) && !string.IsNullOrEmpty(strPIN) && strPIN.Length ==6 && strCardID.Length==4)
            {
                int result = bankSytemObject.AuthenticateUser(strCardID,strPIN);
                if(result == 0)
                {
                    intCountCorrectAuthen++;
                }
                return 0;
            }
            else
            {
                intCountCorrectAuthen++;
                return 0;

            }
           
        }

        public string ChangePIN()
        {
            return "Change PIN Succesfull !";
        }

        public string ValidateCard(string strCardId)
        {
            if(!string.IsNullOrEmpty(strCardId))
            {
                int intResult = bankSytemObject.ValidateCard(strCardId);
                if(intResult == 0)
                {
                    return "Your ATM Card was block permanetly ";
                }if(intResult == 1)
                {
                    return "Card Valid , please choose serivice ";
                }
                if(intResult == 2)
                {
                    return "Your ATM Card was block temporaly ";
                }if(intResult == 3)
                {
                    return "Card not valid !!!!!! Alert !!!! ";
                }
            }
            else
            {
                return "Card not valid !!!!!! Alert !!!! ";
            }
            return "Card not valid !!!!!! Alert !!!! ";
        }

        public int PrintReceipt(Account accObject)
        {
            return 1;
        }
    }
}
